/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package com.ia.controllers;

import com.ia.bo.calcularCamino;
import com.ia.bo.mapaMetro;
import com.ia.sd.nodo;
import com.ia.sd.pila;
import java.net.URL;
import java.util.ArrayList;
import java.util.Hashtable;


public class MetroController {
    private mapaMetro       mapa;
    private String          estacionesMP[][];
    private Hashtable<String,int[]>   htLineaEstacion;
    private ArrayList estaciones;
    private String sEstaciones[];
    private URL imgInicio;
    private URL imgFin;
    private URL imgTransbordo;
    private URL imgLinea[];
    
    public MetroController(){
        //this.imgsrc = MetroController.class.getClassLoader().getSystemResource("LogoMetroPraga.png").toString();
        this.imgInicio  = getClass().getResource("/images/InicioTrayecto.png");
        this.imgFin     = getClass().getResource("/images/finTrayecto.png");        
        this.htLineaEstacion=new Hashtable<String,int[]>();
        this.estaciones     =new ArrayList();
        this.mapa=mapaMetro.getMapaMetro();
        this.imgLinea        = new URL[this.mapa.getNLineas()];
        this.imgLinea[0]     = getClass().getResource("/images/verde.png");
        this.imgLinea[1]     = getClass().getResource("/images/amarillo.png");
        this.imgLinea[2]     = getClass().getResource("/images/rojo.png");
        this.imgTransbordo   = getClass().getResource("/images/transbordo.png");
        this.cargaEstacionesHash();
    }
    public String[] getEstaciones(){
        this.sEstaciones=new String[this.estaciones.size()];
        for(int i=0;i<this.estaciones.size();i++){
            this.sEstaciones[i]=(String)this.estaciones.get(i);
        }
        return this.sEstaciones;      
        
        
    }
    public void cargaEstacionesHash(){
        this.estacionesMP   =   this.mapa.getLineas();        
        for(int i=0;i<this.mapa.getNLineas();i++){
           for(int j=0;j<this.mapa.getNEstaciones()[i];j++){
                int[] pos=new int[2];
                pos[0]=i; //linea
                pos[1]=j; // posicion
                this.htLineaEstacion.put(this.estacionesMP[i][j], pos); 
                this.estaciones.add(this.estacionesMP[i][j]);
                              
            }
        }        
    }
    public String[] getRutaViaje(String estOrig, String estDes){
        String ruta[]=null;
        URL imgLinea=null;
        int [] posOrig=(int [])this.htLineaEstacion.get(estOrig);
        int [] posDest=(int [])this.htLineaEstacion.get(estDes);
        calcularCamino cc=new calcularCamino(posOrig[1],posDest[1],posOrig[0],posDest[0]);
        //ruta=cc.calcularCamino(this.mapa);
        pila camino = cc.calcularCamino(this.mapa);
        nodo aux, aux2 = null;
        aux = camino.desapilar();        
        String respuesta = 
               "<table border=0 CellPadding=0 CellSpacing=0>"+
               "    <tr><td align=center width=50><img src="+this.imgInicio+"</img></td><td><b>Recorrer por la línea: </b>"+this.mapa.getNombreLinea()[aux.getLinea()]+"</td></tr>"+
               "    <tr><td align=center><img src="+this.imgLinea[aux.getLinea()]+"</img></td><td>"+this.mapa.getLineas()[aux.getLinea()][aux.getPos()]+"</td></tr>";
               
        while (!camino.vacia()) {
            aux2 = camino.desapilar();
            if (aux.getLinea() == aux2.getLinea()) {
                respuesta = respuesta.concat("<tr><td align=center><img src="+this.imgLinea[aux2.getLinea()]+"</img></td>"+
                                             "    <td>" + this.mapa.getLineas()[aux2.getLinea()][aux2.getPos()])+"</td></tr>";
            } else {
                respuesta = respuesta.concat("<tr><td align=center><img src="+this.imgTransbordo+"</img></td><td><font color=blue>Transbordo en estación: <b>" + this.mapa.getLineas()[aux.getLinea()][aux.getPos()] + 
                                                               "</b> de la línea <b>" + this.mapa.getNombreLinea()[aux.getLinea()] +
                                                               "</b> a la línea <b>" + this.mapa.getNombreLinea()[aux2.getLinea()]+"</b></font></td></tr>");
                /*respuesta = respuesta.concat("Recorrer por la línea " + this.mapa.getNombreLinea()[aux2.getLinea()] +
                                             "<img src="+this.imgLinea[aux2.getLinea()]+"</img>&nbsp;"+this.mapa.getLineas()[aux2.getLinea()][aux2.getPos()]);*/
                respuesta = respuesta.concat("<tr><td align=center><img src="+this.imgLinea[aux2.getLinea()]+"</img></td>"+
                                             "<td>"+this.mapa.getLineas()[aux2.getLinea()][aux2.getPos()]+"</td></tr>");
            }
            aux = aux2;
        }
        respuesta = respuesta.concat("<tr><td align=center><img src="+this.imgFin+"</img></td><td><b>Final de Trayecto</b></td></tr>");
        respuesta = respuesta.concat("<tr><td colspan=2>Coste del trayecto:&nbsp;<b>" + aux2.getCoste() + "Km</b></td></tr></table>");
      
        //System.out.println(respuesta);
        ruta = new String[]{respuesta};
        return ruta;
    }
    
}
